// Util.hpp
#pragma once
#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>

// 工具类
class Util
{
public:
    static int ReadLine(int sock, std::string &out)
    {
        char ch = 'x';
        while (ch != '\n')
        {
            ssize_t s = recv(sock, &ch, 1, 0);
            if (s > 0)
            {
                if (ch == '\r')
                {
                    recv(sock, &ch, 1, MSG_PEEK); // 窥探下一个字符是不是'\n'
                    if (ch == '\n')               // 窥探成功，'\n'一定存在，\r\n -> \n
                        recv(sock, &ch, 1, 0);
                    else
                        ch = '\n';
                }
                // 1. 普通字符
                // 2. \n
                out += ch;
            }
            else if (s == 0)
                return 0;
            else
                return -1;
        }
        return out.size();
    }
    static bool CutString(const std::string &target, std::string &sub1_out, std::string &sub2_out, const std::string sep)
    {
        size_t pos = target.find(sep);
        if (pos == std::string::npos)
        {
            return false;
        }
        sub1_out = target.substr(0, pos);
        sub2_out = target.substr(pos + sep.size());
        return true;
    }
};
